﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace IRPG
{
    class ROLE<T>
        where T : class,IWeapon, new()
        //当where T后面有接口时，那该T的类型只能是继承该接口的类型
        // class时只能是引用类型，struct是只能是值类型
        //new() 表明在类中必须有一个默认的无参构造函数，如果不加new()约束 T是不能构造实例的，new()明确告诉编辑器T类型有指定的无参构造函数，new()必须放在约束条件的最后一个。
    {
        public string Name
        {
            get;
            set;
        }
        public ROLE(string name)
        {
            Name = name;
        }
        private static readonly IWeapon weapon = new T(); 
        public IWeapon Current()
        {
            return weapon; //实例化一个具体的武器，并赋给Role的Weapon成员的过程，就是依赖注入！依赖注入其实是一个过程的称谓！
            //这里实例化了服务类T，注入客户类（Role）中。
        }
        
    }
}
